The present invention relates generally to Web services and, more particularly, to a system and method for hosting one or more versions of a service using a service proxy.
Web services have become important building blocks of distributed applications due to the growing adoption of service-oriented computing. As a result, Web services have matured to the point where service lifecycle issues such as managing multiple versions of services have become inevitable as well as challenging. As such, the solutions to these issues have become paramount. Service version management is no exception. Versioning of Web services is challenging, because it inevitably affects each part of the service lifecycle. In particular, managing the transition between service versions is difficult in a distributed environment without explicit version support. In approaching this problem, one is faced with the fact that versioning in a distributed environment such as the Web is ultimately an end-to-end issue touching all aspects of the service lifecycle.
This lack of versioning support in relevant standards and tools has meant that developers have been forced to address this problem in an ad hoc manner with approaches that have limited the flexibility of both service providers and service consumers to accommodate change. The Web services model of once published/always published and the expectation of continuous availability of services make dealing with version changes especially difficult not only for service providers but also for service consumers and service developers.
A commonly-used solution for versioning a Web service is to create an entirely new Web service with a new Web services description language (WSDL) file and new namespaces. This is less than ideal, as it requires the re-building of client applications. Also, there is no meta-data to capture the changes and the relationship among different versions. The OASIS WSDM-MOWS 1.0 draft specification states that a Web service's description, interface, service, and endpoint can be separately versioned and defined in their own individual namespaces. This is an approach to describe the changes in detail, but does not address how to manage these separate versions in the deployment cycles. Other approaches focus on the data models and subscription and notification mechanisms for the service registry, and they also deal with the issues for the service consumer of how to discover and subscribe to a version of a service. Still other approaches introduce some application program interfaces (APIs) for generating a dynamic proxy for the service consumer so that the Web service client application does not need to be re-built every time the target service changes, although this approach does not address the needs of the service provider. Thus, the current approaches focus on controlling versions in the service registry and the service consumer.
What is needed is a system and method for solving the versioned service problem in such a way that is transparent to the existing service-client programming model (e.g., insulates service consumers from minor version changes), supports continuous service availability, allows for concurrent deployment and utilization of multiple versions, and gives services providers the flexibility to manage version transition decisions.